草庐IT

c++ - std::unique_ptr 和指向指针的指针

全部标签

go - golang中值类型/指针类型的区别

typeTstruct{Namestring}func(tT)M1(){t.Name="name1"}func(t*T)M2(){t.Name="name2"}typeintfinterface{M1()M2()}funcmain(){vart1T=T{"t1"}t1.M1()t1.M2()vart2intf=t1t2.M1()t2.M2()}为什么当我使用vartfintf=&t1时,它是正确的但是当我使用vartfintf=&t1时,它是不正确的两种表示有什么区别吗? 最佳答案 whenIusevartfintf=&t1,It'

pointers - 为什么在将它传递给另一个函数时需要指向 Go bytes.Buffer 的指针?

在下面的代码中,write_commas要求缓冲区参数是一个指针。它有效。替代方案(即不使用指针)会导致空白输出。为什么传递实际的bytes.Buffer无法打印任何内容?或者换句话说,传递实际的bytes.Buffer是否会创建一个副本,从而将字节写入一个没有任何内容正在读取的缓冲区?packagemainimport("fmt""bytes")funcmain(){s:="1234567898"fmt.Println(Comma(s))}funcComma(sstring)string{varbufbytes.Buffer//0{whole_part:=sbytes[:decima

go - 有什么方法可以使用 golang std 库来格式化日志(如下所述)?

2018年2月1日下午3:04:05(UTC)|这是日志消息2018-02-01T15:04:05Z|这是日志消息我在gosrc中找到了下一个格式:https://github.com/golang/go/blob/master/src/log/log.go#L37但似乎我无法仅使用那些来做到这一点.. 最佳答案 这里有两个选项:使用log.SetOutput设置自定义编写器。或者使用fmt包而不是只打印到stdout或其他地方-stdlib日志包做的不多而且很容易创建你自己的日志包,它以自定义时间格式输出到stdout(或日志文件

函数返回后不改变指针

语言是“Go”(“Golang”)。函数initApp正在接收指向对象的指针(Go中的“struct”)。在函数内部,我创建了一个新的对象指针并初始化了对象的值。打印和调试器都表明在函数返回之前一切都很好。但是在Return之后,作为函数参数的指针具有与函数调用之前相同的空值。为什么会这样?代码在这里:https://pastebin.com/0Gww2CQC//ptr.go.packagemainimport"fmt"typeClassXstruct{NamestringAgeint}funcmain(){varobj*ClassXinitApp(obj)fmt.Println(ob

pointers - 如何访问结构字段,它是结构内部的指针,结构本身就是一个指针

在我下面的代码中,为什么*bikeSlice[0].Type返回给我的是Type字段的值而不是内存地址?为什么*bikeSlice[0]返回{Type:0xc0000641c0}虽然*bikeSlice[0].Type似乎自动取消引用类型字段?packagemainimport"fmt"typeBikestruct{Type*string}funcmain(){type1:="road"bike1:=Bike{Type:&type1,}type2:="mountain"bike2:=Bike{Type:&type2,}varbikeSlice[]*BikebikeSlice=appen

postgresql - 如何获取 unique_constraint 违规的列名?

我正在使用pq驱动程序,我想知道为什么当我遇到唯一约束违规时pq.Error给出一个空列。我可以解析Detail但是Column是空的有什么原因吗?如果我可以从Column获取email而不是解析Detail会更好这是错误的样子:Severity:"ERROR"Code:"23505"Message:"duplicatekeyvalueviolatesuniqueconstraint"unique_users""Detail:"Key(email)=(user3@email.com)alreadyexists."Hint:""Position:""InternalPosition:""

go - 如何强制编译器控制值/值指针函数参数?

处理go的函数时,我发现在使用“通用”接口(interface){}类型时,无法强制编译器控制我是传递值参数还是值指针参数。funcf(ointerface{}){...}最明显的解决方案是使用以下修改:funcf(o*interface{}){...}虽然编译成功了,但我发现这一步不对。那么,有什么方法可以表明我想传递任何指针? 最佳答案 你必须使用reflection.import"reflect"funcf(ointerface{}){if_,ok:=reflect.Typeof(o).(*reflect.PtrType);!

go - 指针与值参数和接收者的权衡

我来自C++世界,使用诸如移动语义和RVO之类的东西。从那以后,我想知道按值传递参数时是否有任何权衡取舍?在我的例子中,我有相当大的结构需要传递给一堆函数。据我了解,每次我将值传递给函数时,都会创建一个副本。传递指针而不是值会更好吗?我看到唯一的权衡是原始对象可能被意外或无意地更改,并且调用者不清楚传递的参数不应被修改。如果传递的值没有被修改,是否有优化? 最佳答案 没有对此进行优化,所有内容都会被复制。它归结为被复制的不同字段的数量(即,如果您有一个结构成员,那么其中的字段数量当然也很重要)。因此,如果您有非常复杂的结构,并且性能

pointers - 我应该用指向结构的指针还是只在结构上定义我的函数?

在go中我似乎有两个选择:foo:=Thing{}foo.bar()foo:=&Thing{}foo.bar()func(selfThing)bar(){}func(self*Thing)bar(){}用selfThing或self*Thing定义我的函数的更好方法是什么?编辑:这不是关于方法和函数的问题的重复。这个问题与Thing和&Thing有关,我认为它的不同之处足以保证它有自己的url。 最佳答案 看看这个来自theofficialFAQ的项目:Forprogrammersunaccustomedtopointers,the

Golang 类型在指向一种类型 slice 的指针 slice 与另一种类型 slice 之间的类型转换

我是Golang的新手。当我尝试它时,出现编译错误:cannotusea.B(type[]*C)astype[]Zinfieldvalue代码:packagemaintypeAstruct{B[]*C}typeCstruct{charstring}typeXstruct{Y[]Z}typeZstruct{charstring}funcdoSomething(rinterface{})X{a:=r.(*A)returnX{Y:a.B,//cannotusea.B(type[]*C)astype[]Zinfieldvalue}}funcmain(){something:=&C{"abc"}